package org.example.controller;


import com.mysql.cj.util.StringUtils;
import org.example.dao.UserDao;
import org.example.model.UserInfo;
import org.example.utils.DbUtil;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.Connection;


@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    //DbUtil实例化
    DbUtil dbUtil=new DbUtil();
    //UserDao实例化
    UserDao userDao=new UserDao();
//    快捷键复写父类ctrl+o
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //删去，父类调用，我们自己处理的请求逻辑
//        ctrl+D 复制
        /*
        * 从前台发送过来的请求中获取参数
        * */
        String username=req.getParameter("userName");
        String Password=req.getParameter("passWord");
        //变量名.sout 回车 是快捷打印参数
        System.out.println("username:"+username);
        System.out.println("password:"+Password);
//        1.验证用户的合法性
//        1.1判断是否为空
//        1.2正则表达式判断数据合法性
//        2.验证用户真实性 根据用户的账户和密码，假设用户是呆子 可能会发空数据
        if(StringUtils.isNullOrEmpty(username) ||
        StringUtils.isNullOrEmpty(Password)){
            //给出错误信息提示用户输入正确的信息
            //设置响应的属性携带到前台去
            req.setAttribute("error","用户名或者密码为空");
            //把当前的请求转发给用户，告知他填写的信息有误,通过请求转发方式
            //传回登录页面，响应和请求发回去
            req.getRequestDispatcher("index.jsp").forward(req,resp);

        }
        //3.对用户名和密码进行验证
        /*
        3.1 建立数据库连接
        3.2 查库 根据用户名和密码查询数据库 判断用户是否存在库中

        if true 去到 我们业务的主页
        else 告知用户用户名或者密码错误  ->index.jsp
         */
        //3.1 建立数据库，把前端传来的值 进行封装，封装成模型
        //3.1.1 model 的封装

        UserInfo userInfo=new UserInfo(username,Password);
        //建立连接
        Connection con=null;
        try {
            con=dbUtil.getCon();
            //执行查询业务 交由持久化层去查询
            UserInfo rsUser=userDao.login(con,userInfo);
            /*
                空值返回-》提示用户信息错误 index.jsp
                有值返回 -》跳转首页 设置用户信息
             */
            if (rsUser==null) {
                //给出错误信息提示用户输入正确的信息
                //设置响应的属性携带到前台去
                req.setAttribute("error","用户名或者密码错误！");
                //把当前的请求转发给用户，告知他填写的信息有误,通过请求转发方式
                //传回登录页面，响应和请求发回去
                req.getRequestDispatcher("index.jsp").forward(req,resp);

            }else{
                //通过Session(会话层） 设置用户信息
                req.getSession().setAttribute("userInfo",rsUser);
                //通过转发重定向到首页
                resp.sendRedirect(req.getContextPath()+"/main.jsp");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //关闭连接
            dbUtil.closecon(con);
        }

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //当获取Post请求时候 直接转发GET方法处理
        this.doGet(req, resp);
    }


}
